<?php

class desktop_view_input {

    function input_image($params) {
        $params['type'] = 'image';
        $ui = new base_component_ui($this);
        $domid = $ui->new_dom_id();
        
        $input_name = $params['name'];
        $input_value = $params['value'];
        
        $image_src = base_storager::image_path($input_value, 's');
        
        if (! $params['width']) {
            $params['width'] = 50;
        }
        
        if (! $params['height']) {
            $params['height'] = 50;
        }
        
        $imageInputWidth = $params['width'];
        $url = "&quot;index.php?app=desktop&act=alertpages&goto=" . urlencode("index.php?app=image&ctl=admin_manage&act=image_broswer") . "&quot;";
        
        $html = '<div class="image-input clearfix" style="width:' . $imageInputWidth . 'px;" gid="' . $domid . '">';
        $html .= '<div class="image-input-view" style="text-align:center;width:100%;height:' . $params['height'] . 'px;">';
        if (! $image_src) {
            $image_src = app::get('desktop')->res_url . '/images/default_image.png';
        }
        $html .= '<img src="' . $image_src . '" onload="$(this).zoomImg(' . $params['width'] . ',' . $params['height'] . ', true);">';
        $html .= '</div>';
        $html .= '<div class="image-input-handle" onclick="Ex_Loader(&quot;modedialog&quot;,function(){new imgDialog(' . $url . ',{handle:this});}.bind(this));">' . app::get('desktop')->_('选择') . ' <i class="fa fa-picture-o"></i> <i class="fa fa-angle-right frt"></i>';
        $html .= '</div>';
        $html .= '<input type="hidden" name="' . $input_name . '" value="' . $input_value . '">';
        $html .= '</div>';
        
        return $html;
    }

    function input_image_button($params) {
        $app = app::get('desktop');
        $render = new base_render($app);
        
        $render->pagedata['name'] = $params['name'] ? $params['name'] : '';
        $render->pagedata['value'] = $params['value'] ? $params['value'] : '';
        $render->pagedata['link_name'] = $params['link_name'];
        $render->pagedata['link_cls'] = $params['link_cls'] ? $params['link_cls'] : '';
        $render->pagedata['link_id'] = $params['link_id'] ? $params['link_id'] : '';
        $render->pagedata['link_value'] = $params['link_value'] ? $params['link_value'] : '';
        
        return $render->fetch('ui/input_image_btn.html', 'desktop');
    }

    function input_object($params) {
        $return_url = $params['return_url'] ? $params['return_url'] : 'index.php?app=desktop&ctl=editor&act=object_rows';
        $callback = $params['callback'] ? $params['callback'] : '';
        $init = $params['data']['init'] ? $params['data']['init'] : '';
        $params['breakpoint'] = isset($params['breakpoint']) ? $params['breakpoint'] : 20;
        $extend = $params['extend'] ? $params['extend'] : '';
        
        $object = $params['object'];
        if (strpos($params['object'], '@') !== false) {
            list ($object, $app_id) = explode('@', $params['object']);
            $params['object'] = $object;
        } elseif ($params['app']) {
            $app_id = $params['app'];
        } else {
            $app_id = $this->app->app_id;
        }
        
        $app = app::get($app_id);
        $o = $app->model($object);
        $desktop = app::get('desktop');
        $render = new base_render($desktop);
        $ui = new base_component_ui($app);
        
        $dbschema = $o->get_schema();
        
        $params['app_id'] = $app_id;
        
        if (isset($params['filter'])) {
            if (! is_array($params['filter'])) {
                parse_str($params['filter'], $params['filter']);
            }
        }
        
        $params['domid'] = substr(md5(uniqid()), 0, 6);
        
        $key = $params['key'] ? $params['key'] : $dbschema['idColumn'];
        $textcol = $params['textcol'] ? $params['textcol'] : $dbschema['textColumn'];
        
        // 显示列 可以多列显示 不完全修改 。。。。。。。
        $textcol = explode(',', $textcol);
        $_textcol = $textcol;
        $textcol = $textcol[0];
        
        $tmp_filter = $params['filter'] ? $params['filter'] : null;
        $count = $o->count($tmp_filter);
        if ($count <= $params['breakpoint'] && ! $params['multiple'] && $params['select'] != 'checkbox') {
            if (strpos($textcol, '@') === false) {
                $list = $o->getList($key . ',' . $textcol, $tmp_filter);
                if (! $list[0])
                    $type = array();
                foreach ($list as $row) {
                    $label = $row[$textcol];
                    if (! $label && method_exists($o, 'title_modifier')) {
                        $label = $o->title_modifier($row[$key]);
                    }
                    $type[$row[$key]] = $label;
                }
            } else {
                list ($name, $table, $app_id) = explode('@', $textcol);
                $app = $app_id ? app::get($app_id) : $app;
                $mdl = $app->model($table);
                $list = $o->getList($key, $tmp_filter);
                foreach ($list as $row) {
                    $tmp_row = $mdl->getList($name, array(
                        $mdl->idColumn => $row[$key]
                    ), 0, 1);
                    $label = $tmp_row[0][$name];
                    if (! $label && method_exists($o, 'title_modifier')) {
                        $label = $o->title_modifier($row[$key]);
                    }
                    $type[$row[$key]] = $label;
                }
            }
            $tmp_params['name'] = $params['name'];
            $tmp_params['value'] = $params['value'];
            $tmp_params['type'] = $type;
            if ($callback)
                $tmp_params['onchange'] = $callback . '(this)';
            $str_filter = $ui->input($tmp_params);
            unset($tmp_params);
            return $str_filter;
        }
        
        $params['idcol'] = $keycol['keycol'] = $key;
        $params['textcol'] = implode(',', $_textcol);
        
        $params['_textcol'] = $_textcol;
        if ($params['value']) {
            if (strpos($params['view'], ':') !== false) {
                list ($view_app, $view) = explode(':', $params['view']);
                $params['view_app'] = $view_app;
                $params['view'] = $view;
            }
            if (is_string($params['value'])) {
                $params['value'] = explode(',', $params['value']);
            }
            $params['items'] = $o->getList('*', array(
                $key => $params['value']
            ), 0, - 1);
            
            // 过滤不存在的值
            // 某些数据被添加后 可能原表数据已删除，但此处value中还存在。
            $_params_items_row_key = array();
            foreach ($params['items'] as $k => $_params_items_row) {
                $_params_items_row_key[] = $_params_items_row[$key];
                if ($extend) {
                    $params['items'][$k]['extend'] = $extend[$_params_items_row[$key]];
                }
            }
            $params['value'] = implode(',', $_params_items_row_key);
        }
        
        if (isset($params['multiple']) && $params['multiple']) {
            if (isset($params['items']) && count($params['items'])) {
                $params['display_datarow'] = 'true';
            }
            $render->pagedata['_input'] = $params;
            return $render->fetch('finder/input.html');
        } else {
            if ($params['value'] && $params['select'] != 'checkbox') {
                $string = $params['items'][0][$textcol];
            } else {
                $string = $params['emptytext'] ? $params['emptytext'] : app::get('desktop')->_('请选择...');
            }
            
            $str_app = $params['app'];
            unset($params['app']);
            
            if ($params['data']) {
                $_params = (array) $params['data'];
                unset($params['data']);
                $params = array_merge($params, $_params);
            }
            
            if ($params['select'] == 'checkbox') {
                if ($params['default_id'])
                    $params['domid'] = $params['default_id'];
                $params['type'] = 'checkbox';
            } else {
                $id = "handle_" . $params['domid'];
                $params['type'] = 'radio';
                $getdata = '&singleselect=radio';
            }
            
            if (is_array($params['items'])) {
                foreach ($params['items'] as $key => $item) {
                    $items[$key] = $item[$params['idcol']];
                    $params['items'][$key]['extend'] = $params['extend'][$key];
                }
            }
            $params['return_url'] = urlencode($return_url);
            $vars = $params;
            $vars['items'] = $items;
            $getobject = array(
                'obj_filter' => $vars['obj_filter'],
                'filter' => $vars['filter'],
                'name' => $vars['name'],
                'object' => $vars['object']
            );
            $getobject = utils::http_build_query($getobject);
            
            $object = utils::http_build_query($vars);
            
            // $url = 'index.php?app=desktop&act=alertpages&goto='.urlencode('index.php?app=desktop&ctl=editor&act=finder_common&app_id='.$app_id.'&'.$object.$getdata);
            $url = 'index.php?app=desktop&act=alertpages&goto=' . urlencode('index.php?app=desktop&ctl=editor&act=finder_common&app_id=' . $app_id . '&' . $getobject . $getdata);
            
            $render->pagedata['string'] = $string;
            $render->pagedata['url'] = $url;
            $render->pagedata['app'] = 'app=' . $str_app;
            $render->pagedata['return_url'] = $return_url;
            $render->pagedata['id'] = $id;
            $render->pagedata['params'] = $params;
            $render->pagedata['object'] = $object;
            $render->pagedata['callback'] = $callback;
            $render->pagedata['init'] = $init;
            return $render->fetch('finder/input_radio.html');
        }
    }

    function input_html($params) {
        if (defined('EDITOR_ALL_SOUCECODE') && EDITOR_ALL_SOUCECODE) {
            $params['width'] = $params['width'] ? $params['width'] : '100%';
            $params['height'] = $params['height'] ? $params['height'] : '100%';
            $html = "<div class='input-soucecode-panel' style='border:1px #e9e9e9 solid;background:#fff;height:300px;'>";
            $html .= $this->input_soucecode($params);
            $html .= "</div>";
            
            return $html;
        }
        
        $id = 'mce_' . substr(md5(rand(0, time())), 0, 6);
        $editor_type = app::get('desktop')->getConf("system.editortype");
        $editor_type == '' ? $editor_type = 'wysiwyg' : $editor_type = 'wysiwyg';
        $includeBase = $params['includeBase'] ? $params['includeBase'] : true;
        $params['id'] = $id;
        
        $img_src = app::get('desktop')->res_url;
        $desktop = app::get('desktop');
        $render = new base_render($desktop);
        $render->pagedata['id'] = $id;
        $render->pagedata['img_src'] = $img_src;
        $render->pagedata['includeBase'] = $includeBase;
        $render->pagedata['params'] = $params;
        
        $style2 = $render->fetch('editor/html_style2.html');
        
        if ($editor_type == 'textarea' || $params['editor_type'] == 'textarea') {
            $html = $style2;
        } else {
            $style1 = $render->fetch('editor/html_style1.html');
            $html = $style1;
            $html .= $style2;
        }
        return $html;
    }

    function input_soucecode($params) {
        $desktop = app::get('desktop');
        $render = new base_render($desktop);
        $id = 'sh_' . substr(md5(rand(0, time())), 0, 6);
        $params['id'] = $id;
        $params['res_url'] = app::get('desktop')->res_url;
        
        $render->pagedata = $params;
        
        return $render->fetch('editor/syntax_highlighter.html');
    }

    function input_desktop_radio($params) {
        $params['type'] = 'radio';
        $options = $params['options'];
        $value = $params['value'];
        unset($params['options'], $params['value']);
        $input_tpl = utils::buildTag($params, 'input ', true);
        $id_base = $params['id'];
        $htmls = array();
        $i = 1;
        foreach ($options as $k => $item) {
            $id = $id_base . '-' . ($i++);
            if ($value == $k) {
                $html = str_replace('/>', ' value="' . htmlspecialchars($k) . '" checked="checked" />', $input_tpl);
            } else {
                $html = str_replace('/>', ' value="' . htmlspecialchars($k) . '" />', $input_tpl);
            }
            $html = str_replace('id="' . $id_base . '"', 'id="' . $id . '"', $html);
            $htmls[] = $html . '<label for="' . $id . '">' . htmlspecialchars($item) . '</label>';
        }
        $params['separator'] = $params['separator'] ? $params['separator'] : '<br>';
        $return = implode($params['separator'], $htmls);
        
        return $return;
    }
}
